今天要來教大家如何讓程式碼變的更簡潔,基本上這些都是可以用for迴圈寫出來的效果,但是會很冗長要花很多時間。使用高階函式可以簡化我們的開發邏輯,並專注在UI開發上面。當然函式遠不止上面那些,我今天來介紹一些最常用的函式。
高階函式常常會搭配closure使用,所以要先了解一下閉包在做什麼哦~
今天會介紹
較常使用在陣列,用來排序由小到大或是由大到小。如果是字串也可以從A排到Z。下面我們用程式碼來範例
var array = [9,8,7,1,2,4,3,5] //創造一個陣列
array.sort() // sort()回傳結果,並會把結果存回去原本的陣列
array //回傳 [1,2,3,4,5,7,8,9]
array.sorted() // sorted() 回傳結果,但不會影響原陣列
array //回傳 [1,2,3,4,5,7,8,9]
array.sort(>) //可以在括號使用>或<來表示由大到小還是由小到大。回傳 [9,8,7,5,4,3,2,1]
這是一個很好用的高階函式,用法跟英文意思一樣,是用來做篩選的。寫下你要篩選的條件,就會回傳結果。
var array = [9,8,7,1,2,4,3,5] //創造一個陣列
let filterArray = array.filter{ $0 > 5 }
//我們使用閉包表示,篩選陣列裡>5的數字,所以回傳 [9,8,7]
科普一下:$0是一個速記參數,用來參照原本集合中的任何元素。
簡單來說會對原本的陣列進行你想要的條件操作,然後回傳一新的集合。
var array = [9,8,7,1,2,4,3,5] //創造一個陣列
let mapArray = array.map{$0 * 2} //陣列裡每個元素都會*2
這個比較難一點點,簡單來說是從原本集合中的所有元素,做一個運算,然後最後會回傳一個值。
var array = [9,8,7,1,2,4,3,5] //創造一個陣列
let reduceArray = array.reduce(0, { $0 + $1 }) //從0,$0是上一個運算結果,$1是下一個元素。所以簡單來說就是把陣列全部加起來
let reduceArray2 = array.reduce(1, { $0 * $1 }) //回傳60480,把陣列全部相乘
let reduceArray2 = numbers.reduce(1, *) //可以再簡短寫法
這個跟filter有點像,也是篩選你要的條件,但是它只會回傳一個布林值,也就是他只會回傳true或是false
var array = [9,8,7,1,2,4,3,5] //創造一個陣列
let containsArray = array.contains{ $0 > 5 } //是否有>5的元素,回傳true